package com.itheima.immutableDemo;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class ImmutableDemo2 {
    public static void main(String[] args) {
        HashMap<String, String> hm = new HashMap<>();

        hm.put("1", "aaa1");
        hm.put("2", "aaa2");
        hm.put("3", "aaa3");
        hm.put("4", "aaa4");
        hm.put("5", "aaa5");
        hm.put("6", "aaa6");
        hm.put("7", "aaa7");
        hm.put("8", "aaa8");
        hm.put("9", "aaa9");
        hm.put("10", "aaa10");
        hm.put("11", "aaa11");
        hm.put("12", "aaa12");

        // 创建键值对数量大于10的不可变Map，v1.0
        Set<Map.Entry<String, String>> entries = hm.entrySet();

        // toArray方法会在底层比较集合的长度与数组长度的大小
        // 集合长度 > 数组长度：数据在数组中放不下，会根据是几个数重新创建数组
        // 集合长度 < 数组长度：数据在数组中放得下，直接用
        Map.Entry[] arr = entries.toArray(new Map.Entry[0]);
        Map map_immutable1 = Map.ofEntries(arr);

        // 创建键值对数量大于10的不可变Map，v1.5
        Map<Object, Object> map_immutable2 = Map.ofEntries(hm.entrySet().toArray(new Map.Entry[0]));

        // 创建键值对数量大于10的不可变Map，v2.0，JDK10以后
        Map<String, String> map_immutable3 = Map.copyOf(hm);
    }
}
